package com.smit.icast;

import com.smit.dvb.CIData;
import com.smit.dvb.CIMenuInfo;
import com.smit.dvb.CIPinInfo;
import com.smit.dvb.DVBEitInfo;
import com.smit.dvb.DVBFreqInfo;
import com.smit.dvb.DVBServiceInfo;
import com.smit.dvb.DVBTimeInfo;
import com.smit.dvb.DVBTunerInfo;
import com.smit.dvb.IDVBCallback;
import com.smit.dvb.DVBService;
import com.smit.dvb.jni.DVB;

/**
 * icast dvb service
 */
public class ICastDVBService extends DVBService {

    /**
     * 构造函数
     */
    public ICastDVBService() {
    }

    /**
     * 初始化DVB系统
     * @return 0成功，其他失败
     */
    @Override
    public int initialize() {
        return DVB.getInstance().initialize();
    }
    /**
     * 唤醒DVB
     */
    @Override
    public void resume() {
        DVB.getInstance().resume();
    }
    /**
     * DVB待机
     */
    @Override
    public void standby() {
        DVB.getInstance().standby();
    }
    /**
     * DVB结束
     * @return 0 成功，其他失败
     */
    @Override
    public int terminate() {
        return DVB.getInstance().terminate();
    }
    /**
     * 选择T电视还是广播
     * @param groupId 0 广播， 1电视
     */
    @Override
    public void setServiceGroupId(int groupId) {
        DVB.getInstance().setServiceGroupId(groupId);
    }
    /**
     * 设置频点表
     * @param freqTable 频点表
     */
    @Override
    public void setFrequencyTable(DVBFreqInfo[] freqTable) {
        DVB.getInstance().setFrequencyTable(freqTable);
    }
    /**
     * 设备DVB插件路径
     * @param pluginPath 插件路径
     */
    @Override
    public void setDVBPluginPath(String pluginPath) {
        DVB.getInstance().setDVBPluginPath(pluginPath);
    }
    /**
     * 获取 Service Group ID
     * @return 0:广播，1电视
     */
    @Override
    public int getServiceGroupId() {
        return DVB.getInstance().getServiceGroupId();
    }
    /**
     * 恢复默认设置
     */
    @Override
    public void restoreSettings() {
        DVB.getInstance().restoreSettings();
    }
    /**
     * 获取DVB时间
     * @return DVB码流中的时间
     */
    @Override
    public DVBTimeInfo getDVBTime() {
        return DVB.getInstance().getDVBTime();
    }
    /**
     * 获取EIT信息
     * @param serviceInfo 节目
     * @param type 0 当前， 1下一个
     * @return 节目EIT信息
     */
    @Override
    public DVBEitInfo getEitInfo(DVBServiceInfo serviceInfo, int type) {
        return DVB.getInstance().getEitInfo(serviceInfo, type);
    }
    /**
     * 获取所有节目
     * @return 当前DVB的所有节目
     */
    @Override
    public DVBServiceInfo[] getAllServices() {
        return DVB.getInstance().getAllServices();
    }

    /**
     * 手动搜台
     * @param tunerInfo tuner参数
     * @return 0锁台成功，其他锁台失败
     */
    @Override
    public int manualTune(DVBTunerInfo tunerInfo) {
        return DVB.getInstance().manualTune(tunerInfo);
    }

    /**
     * 获取 tuner状态
     * @param block true底层实时获取然后返回, false底层直接返回上次更新的状态
     * @return tuner信息
     */
    public DVBTunerInfo getTunerStatus(boolean block) {
        return DVB.getInstance().getTunerStatus(block);
    }

    /**
     * 开始导入节目
     */
    @Override
    public void startImportServices() {
        DVB.getInstance().startImportServices();
    }
    /**
     * 导入节目信息到DVB
     * @param services 节目信息
     * @param size 节目数
     * @param groupIndex 节目组
     * @param groupName 节目组名
     * @return 导入成功的节目数
     */
    @Override
    public int importServices(DVBServiceInfo[] services, int size, int groupIndex, String groupName) {
        return DVB.getInstance().importServices(services, size, groupIndex, groupName);
    }
    /**
     * 导入结束
     */
    @Override
    public void finishImportServices() {
        DVB.getInstance().finishImportServices();
    }
    /**
     * 手动搜台
     * @param tunerInfo tuner参数
     * @return 0 成功，其他失败
     */
    @Override
    public int manualScan(DVBTunerInfo tunerInfo) {
        return DVB.getInstance().manualScan(tunerInfo);
    }
    /**
     * 自动搜台
     * @param startFreq 开始频点
     * @param endFreq 结束频点
     * @return 0 成功，其他失败
     */
    @Override
    public int autoScan(int startFreq, int endFreq) {
        return DVB.getInstance().autoScan(startFreq, endFreq);
    }
    /**
     * 全频点搜台
     * @param startFreq 开始频点
     * @param endFreq 结束频点
     * @return 0成功，其他失败
     */
    @Override
    public int fullScan(int startFreq, int endFreq) {
        return DVB.getInstance().fullScan(startFreq, endFreq);
    }
    /**
     * 取消搜台
     */
    @Override
    public void abortScan() {
        DVB.getInstance().abortScan();
    }
    /**
     * 播放指定的节目
     * @param index 节目索引，0开始
     * @return 0成功，其他失败
     */
    @Override
    public int playServiceByIndex(int index) {
        return DVB.getInstance().playServiceByIndex(index);
    }
    /**
     * 停止DVB服务
     */
    @Override
    public void stopDVBService() {
        DVB.getInstance().stopDVBService();
    }

    /**
     * 打开CI会话
     */
    @Override
    public void openSession() {
        DVB.getInstance().openSession();
    }

    /**
     * 关闭CI会话
     */
    @Override
    public void closeSession() {
        DVB.getInstance().closeSession();
    }

    /**
     * 选择CI Menu选项
     *
     * @param index 选项索引
     */
    @Override
    public void selectMenuItem(int index) {
        DVB.getInstance().selectMenuItem(index);
    }

    /**
     * 设置MMI密码
     *
     * @param pin 密码
     */
    @Override
    public void setPin(String pin) {
        DVB.getInstance().setPin(pin);
    }

    /**
     * 获取CI Menu显示信息
     *
     * @return CIMenuInfo对象
     */
    @Override
    public CIMenuInfo getCIMenuInfo() {
        return DVB.getInstance().getCIMenuInfo();
    }

    /**
     * 获取CI Pin信息
     *
     * @return CIPinInfo
     */
    @Override
    public CIPinInfo getCIPinInfo() {
        return DVB.getInstance().getCIPinInfo();
    }

    /**
     * 获取hardware信息
     * @return CIData对象，hardware相关信息
     */
    public CIData getHardwareInfo() {
        return DVB.getInstance().getHardwareInfo();
    }

    /**
     * 获取SmartCard相关信息
     * @return CIData对象，SmartCard相关信息
     */
    public CIData getSmartCardInfo() {
        return DVB.getInstance().getSmartCardInfo();
    }

    /**
     * 获取设备Type信息
     * @return CIData对象，设备Type信息
     */
    public String getDeviceType() {
        return DVB.getInstance().getDeviceType().deviceType;
    }
    /**
     * 获取设备ID信息
     * @return CIData对象，设备ID信息
     */
    public String getDeviceId() {
        return DVB.getInstance().getDeviceId().deviceId;
    }
    /**
     * 注册DVB服务回调
     * @param callback 回调
     */
    @Override
    public void registerDVBCallback(IDVBCallback callback) {
        DVB.getInstance().registerDVBCallback(callback);
    }
    /**
     * 取消DVB服务回调
     */
    @Override
    public void removeDVBCallback() {
        DVB.getInstance().removeDVBCallback();
    }
}